/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Hoja4;

/**
 *
 * @author Josue
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
 *campo.paramString()
 * @author Josue
 */
public class DriverHoja4{

    /**
     * @param args the command line arguments
     */
    static JLabel Label;
    static JLabel Label2;
    static JLabel Label3;
    static JLabel Label4;
    static JLabel Label5;
    static JPanel contenido;
    static JPanel botones;
    static JPanel labelstext;
    static JButton calcular;
    static JButton nuevo;
    static JButton ingresar;
    static JTextField campo,campo2,campo3;
    static JComboBox tipo;
    static String[] tipos = {"Integer","Float","Double"};
    static int a,b,c,o;
    static String sign;
    static Stack<Integer> pila;
    static ImageIcon icon = null;
    
    public static void main(String[] args) {
        // TODO code application logic here
         JFrame marco = new JFrame ("Stack");
        
        //Que hacer cuando se cierre la ventana
        marco.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        
        //No se puede cambiar el tamanio
        marco.setResizable(true);
        
        //Adaptarse a los componentes
        marco.pack();
        
        //CENTRADO
        marco.setLocationRelativeTo(null);
        
        //Mostrar
        marco.setVisible(true);
        c=0;
        pila = new Stack();
        //TEXTFIELD
        campo = new JTextField(1);
        campo.setEditable(true);
        campo.setFont(new Font("Arial Narrow",Font.BOLD, 24));
        //
        campo2 = new JTextField(1);
        campo2.setEditable(true);
        campo2.setFont(new Font("Arial Narrow",Font.BOLD, 24));
        //
        campo3 = new JTextField(1);
        campo3.setEditable(true);
        campo3.setFont(new Font("Arial Narrow",Font.BOLD, 24));
        //
        calcular = new JButton("Calcular");
        calcular.addActionListener(new CalcListener());
        ingresar = new JButton("Continuar");
    	ingresar.addActionListener(new IngresarListener());
        ingresar.setEnabled(false);
        nuevo = new JButton("Nuevo");
        nuevo.addActionListener(new NuevoListener());
        labelstext = new JPanel();
        labelstext.setLayout(new GridLayout(3,2));
        botones = new JPanel();
        botones.setLayout(new BoxLayout(botones, BoxLayout.X_AXIS));
        Label = new JLabel("Operaciones POSTFIX: ");
    	Label.setFont(new Font("TimesRoman",Font.PLAIN,25));
        Label2 = new JLabel("Numero 1: ");
    	Label2.setFont(new Font("TimesRoman",Font.PLAIN,25));
    	Label3 = new JLabel("Numero 2: ");
    	Label3.setFont(new Font("TimesRoman",Font.PLAIN,25));
        Label4 = new JLabel("Signo de operacion: ");
    	Label4.setFont(new Font("TimesRoman",Font.PLAIN,25));
        Label5 = new JLabel("El resultado es: "+c);
    	Label5.setFont(new Font("TimesRoman",Font.PLAIN,25));
        contenido = new JPanel();
    	contenido.setLayout(new BoxLayout(contenido, BoxLayout.Y_AXIS));
    	contenido.add(Label);
        labelstext.add(Label2);
        labelstext.add(campo);
        labelstext.add(Label3);
        labelstext.add(campo2);
        labelstext.add(Label4);
        labelstext.add(campo3);
        contenido.add(labelstext);
        contenido.add(Label5);
        botones.add(calcular);
        botones.add(ingresar);
        botones.add(nuevo);
        contenido.add(botones);
        contenido.setPreferredSize(new Dimension(600,100));  
        marco.getContentPane().add(contenido); 
    }
    
    public static void calcular(){
        
        try{
        campo.setEditable(true);
        campo2.setEditable(true);
        campo3.setEditable(true);
            pila.push(Integer.parseInt(campo.getText()));
            pila.push(Integer.parseInt(campo2.getText()));
            sign = campo3.getText();
        if("+".equals(sign))
            c=sumar();
        if("-".equals(sign))
            c=restar();
        if("*".equals(sign))
            c=multi();
        if("/".equals(sign))
            c=div();
        if(!(("+".equals(sign)))){
            if(!(("-".equals(sign)))){
                if(!(("*".equals(sign)))){
                    if(!(("/".equals(sign)))){
                        mensaje("Operación incorrecta");
                        ingresar.setEnabled(false);
                        nuevo();
                    }
                }
            }
        }
        
        ingresar.setEnabled(true);
        calcular.setEnabled(false);
        campo.setEditable(false);
        campo2.setEditable(false);
        campo3.setEditable(false);
        }
        catch(NumberFormatException e){
            mensaje("Numero no valido!!");
            ingresar.setEnabled(false);
            nuevo();
        }
        
    }
//        Este metodo habilita los textfields necesarios para continuar operaciones.
    // 
    public static void mostrar(){
        o = pila.peek();
        Label5.setText("El resultado es: "+c);
        campo.setText(Integer.toString(o));
        campo.setEditable(false);
        calcular.setEnabled(true);
        campo2.setEditable(true);
        campo3.setEditable(true);
    }
    public static int sumar(){
        b = pila.pop();
        a = pila.pop();
        int u = 0;
        u= a+b;
        pila.push(u);
        return u;
    }
    public static int restar(){
        b = pila.pop();
        a = pila.pop();
        int u = 0;
        u= a-b;
        pila.push(u);
        return u;
    }
    public static int multi(){
        b = pila.pop();
        a = pila.pop();
        int u = 0;
        u= a*b;
        pila.push(u);
        return u;
    }
    public static int div(){
        b = pila.pop();
        a = pila.pop();
        int u = 0;
        if (b==0){
            b=1;
            mensaje("No se puede dividir!!");
            ingresar.setEnabled(false);
        }
        u= a/b;
        pila.push(u);
        return u;
    }
    
    public static void nuevo(){
        pila = new Stack();
        c=0;
        a=0;
        b=0;
        sign = null;
        campo.setEditable(true);
        campo.setText("");
        campo2.setText("");
        campo3.setText("");
        ingresar.setEnabled(false);
        calcular.setEnabled(true);
        Label5.setText("El resultado es: "+c);
        campo2.setEditable(true);
        campo3.setEditable(true);
    }
     public static void mensaje(String msg){
         JOptionPane.showMessageDialog(
            contenido,                       
            msg,                        
            "Error",                 
            JOptionPane.WARNING_MESSAGE,
            icon
            );

     }
    
    
     public static class CalcListener implements ActionListener{
        /**
         * 
         * @param e
         */
        @Override
        public void actionPerformed (ActionEvent e){
    	    	  calcular();
                  Label5.setText("El resultado es: "+c);
    	    }
    }
     
     public static class IngresarListener implements ActionListener{
        /**
         * 
         * @param e
         */
        @Override
        public void actionPerformed (ActionEvent e){
    	    	  mostrar();  
    	    }
    }
      public static class NuevoListener implements ActionListener{
        /**
         * 
         * @param e
         */
        @Override
        public void actionPerformed (ActionEvent e){
    	    	  nuevo();  
    	    }
    }

}
